package com.clean.code.chapter2.meaningful.names.section2;


import java.util.ArrayList;
import java.util.List;

/**
 * @author zhanghuiyong
 * @创建时间 2019年01月17日
 * @描述: 实例2.2名副其实
 **/

public class GoodNameDemo {


    private static final int STATUS_VALUE = 0;
    private static final int FLAGGED = 4;

    /**
     * 错误示例1
     */
    public List<int[]> getThem(List<int[]> theList) {
        List<int[]> list1 = new ArrayList<>();
        for (int[] x : theList) {
            if (x[0] == 4) {
                list1.add(x);
            }
        }
        return list1;
    }

    /**
     * 优化一
     *
     * @需求情景 问题的答案没体现在代码段中，可那就是它们该在的地方。
     * 比方说，我们在开发一种扫雷游戏，我们发现，盘面是名为theList的单元格列表，那就将其名称改为gameBoard。
     * 盘面上每个单元格都用一个简单数组表示。我们还发现，零下标条目是一种状态值，而该种状态值为4表示“已标记”。
     * 只要改为有意义的名称，代码就会得到相当程度的改进：
     */
    public List<int[]> getFlaggedCells(List<int[]> gameBoard) {
        List<int[]> flaggedCells = new ArrayList<>();
        for (int[] cell : gameBoard) {
            if (cell[STATUS_VALUE] == FLAGGED) {
                flaggedCells.add(cell);
            }
        }
        return flaggedCells;
    }

    /**
     * 优化二
     * 用类代表数组
     */
    public List<Cell> getFlaggedCellList(List<Cell> gameBoard) {
        List<Cell> flaggedCells = new ArrayList<>();
        for (Cell cell : gameBoard) {
            if (cell.isFlagged()) {
                flaggedCells.add(cell);
            }
        }
        return flaggedCells;
    }

}
